/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.weed.net;

import com.weed.core.WeedException;
import com.weed.net.listener.CallbackListener;
import com.weed.net.listener.SourceEvent;
import com.weed.net.listener.SourceListener;
import java.util.HashMap;

/**
 * 
 * @author Jason
 */
public interface ISource {
    /**
     * 用于发送请求及处理回报数据.
     * @param obj 发送的对象。
     * @param listener 返回后的回调接口。
     */
    public boolean submit(Object obj,CallbackListener listener) throws WeedException;
    
    /**
     * 添加监听。
     * @param  listener 网络监听
     */
    public void addSourceListener(SourceListener listener);
    /**
     * 移除监听。
     * @param  listener 网络监听
     */
    public boolean removeSourceListener(SourceListener listener);
    /**
     * 获得工厂。 
     */
    public SourceFactory getSourceFactory();
    /**
     * 初始化对象,当对象初始化时，该方法将被调用。
     * @param sourceFactory 具体请看SourceFactory.
     */
    void init(SourceFactory sourceFactory,HashMap config);
    /**
     * 获得请求的处理者。
     * @return
     */
    public IRequest getRequest();
    /**
     * 处理所有的事件。
     * @param event
     * @throws WeedException
     */
    public void processEvent(SourceEvent event) throws WeedException;
    /**
     * 获取缓存，用于保存临时的数据。
     * @return
     */
    public HashMap getCache();
    /**
     * 获得源配置。
     * @return
     */
    public HashMap getConfig();
}
